[IA64] fix VTI boot
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 10 Nov 2006 18:14:51 +0000 (11:14 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 10 Nov 2006 18:14:51 +0000 (11:14 -0700)
workaroud patch for memory initial interface

Signed-off-by: zhang xiantao <xiantao.zhang@intel.com>
Signed-off-by: Zhang Xin <xing.z.zhang@intel.com>
tools/libxc/ia64/xc_ia64_hvm_build.c

index ad5c6fdabd10889c59c38b2b05cbd6aa09ca304c..a97b82af23a9dbb4fbb55000f7a3afa755002398 100644 (file)
@@ -554,14 +554,28 @@ setup_guest(int xc_handle, uint32_t dom, unsigned long memsize,
     unsigned long page_array[3];
     shared_iopage_t *sp;
     void *ioreq_buffer_page;
-    unsigned long dom_memsize = (memsize << 20);
+    // memsize = required memsize(in configure file) + 16M
+    // dom_memsize will pass to xc_ia64_build_hob(), so must be subbed 16M 
+    unsigned long dom_memsize = ((memsize - 16) << 20);
+    unsigned long nr_pages = (unsigned long)memsize << (20 - PAGE_SHIFT);
+    int rc;
     DECLARE_DOMCTL;
 
+    // ROM size for guest firmware, ioreq page and xenstore page
+    nr_pages += 3; 
+
     if ((image_size > 12 * MEM_M) || (image_size & (PAGE_SIZE - 1))) {
         PERROR("Guest firmware size is incorrect [%ld]?", image_size);
         return -1;
     }
 
+    rc = xc_domain_memory_increase_reservation(xc_handle, dom, nr_pages,
+                                               0, 0, NULL); 
+    if (rc != 0) {
+        PERROR("Could not allocate memory for HVM guest.\n");
+        goto error_out;
+    }
+
     /* This will creates the physmap.  */
     domctl.u.arch_setup.flags = XEN_DOMAINSETUP_hvm_guest;
     domctl.u.arch_setup.bp = 0;